${name}
${child.name} 在freemarker中数据对象都会被转化为标准的树状结构数据，datamodel。所以可以使用这种连点的方式获得对应数据。
${child.url}

${true?string} 这种写法仅仅只是把true格式化成String类型，对于freemarker来说，true是保留字，不能用作参数名，{true}具备会找不到数据
${.vars['true']}可以使用这种方式代替

错误的写法{summer-number}这种命名会于模板保留关键字冲突，名字中带有减号，可以使用下面的方式来获得值，
.vars是FreeMarker的内置函数，相当于传入的datamodel的根，在freemarker中所有数据传入后都会被转换成datamodel的结构，
它是一种树形结构。
${.vars['summer-number']} 这种写法正确

下面是循环输出
<#list .data_model?keys as key>
${key}
</#list>
下面输出的是child
<#list .data_model.child?keys as key>
${child[key]}
</#list>

freemarker的特殊变量 你可以使用.variable_name语法来访问他们。
你不能只写version,而必须遵循格式.version 这样。
特殊变量有:
data_model 你可以使用来访问数据模型的哈希表。也就是你使用global指令定义在这里不可见的变量
vars 表达式 .vars.name和表达式name返回的相同，vars可以说是数据模型datamodel的根，有时候我们需要使用[]来访问数据
version 返回当前使用的freemarker的版本号
now 返回当前时间
globals 你可以使用来访问全局可访问的变量的哈希表：数据模型datamodel和由global指令创建的变量。注意用assign或macro创建的变量不是全局的
因此当你使用globals时你不能隐藏变量
locales 你可以访问本地化变量的哈希表
其他特殊变量可根据实际使用时查看相关文档，特殊变量不只是这些


注释：
包含在<#--和-->（而不是<!--和-->）之间
语法：
<#--
${…}表达式：
${var},${object.attr},${map.key},${map[key]} ,${list[0]},${1+1}
FreeMarker会在输出表达式结果,对象输出部分语法类似el表达式，但不是el表达式
FTL tags 指令（FreeMarker 模板的语言标记）：
类似于HTML标记，为了与HTML标记区分，以<#tag>开始,以</#tag>结束
directives 指令
类似于HTML标记，为了与HTML标记区分，以<@tag>开始,以</@tag>结束-->

例：
5*7=${5*7}
<#-- ${summer} 值不存在会报错，我们可以使用下面的tags指令方式判断在输出 其中，summer？？这种双问号是判定存在-->
<#if summer??>
${summer}
</#if>
<#-- 也可以使用默认值的方式处理 -->
不输出 ${summer!}   或者输出 ${summer!"null"}
连用方式${summer!sum!name}

<#-- 关于子结构的判空  ${summer.name!}这样不行-->
${(summer.name)!} 这样可以 
<#-- 检查空值或空字符串使用 单？-->
<#if tt??>
	tt has content 如果用？？，会输出这里，因为tt是存在的只是值为空
</#if>
<#if tt?has_content>
	tt has content
</#if>
常用指令
<#if summer?has_content>
   summer has content
<#elseif summer??>
   summer is not null
<#else>
   summer has not content
</#if>

<#switch name>
<#case "Summer">
1
<#break>
<#default>
2
</#switch>

<#list listValue as value>
 下标${value?index}：${value}
 ${value?has_next?string}
</#list>
Json:
[<#list listValue as value>${value}<#if value?has_next>,</#if></#list>]
<#include 	"c.ftl"/>
<#include "a.ftl" parse=false/>

${name?substring(0,3)}